<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>PowerVR SDK</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
<table width="100%">
  <tr>
    <td width="33%">
      <p align="left">&nbsp;<a href="http://www.imgtec.com"><img border="0" src="IMGLogo.jpg" width="200" height="30"></a></p>
    </td>
    <td width="33%">
      <p align="center"><font color="#808080" face="Arial" size="2">PowerVR Software Development Kit</a></font></p>
    </td>
    <td width="34%">
      <p align="right"><a href="http://www.powervr.com"><img border="0" src="PVRlogo.jpg" width="200" height="27"></a></p>
    </td>
  </tr>
</table>
<hr>
</head><body>
<!-- Generated by Doxygen 1.3.6 -->
<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a></div>
<h1>dynamicArray.h</h1><a href="dynamicArray_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/******************************************************************************</span>
00002 <span class="comment"></span>
00003 <span class="comment"> @File         dynamicArray.h</span>
00004 <span class="comment"></span>
00005 <span class="comment"> @Title        Console Log</span>
00006 <span class="comment"></span>
00007 <span class="comment"> @Version      </span>
00008 <span class="comment"></span>
00009 <span class="comment"> @Copyright    Copyright (C)  Imagination Technologies Limited.</span>
00010 <span class="comment"></span>
00011 <span class="comment"> @Platform     ANSI compatible</span>
00012 <span class="comment"></span>
00013 <span class="comment"> @Description  Expanding array template class. Allows appending and direct</span>
00014 <span class="comment">               access. Mixing access methods should be approached with caution.</span>
00015 <span class="comment"></span>
00016 <span class="comment">******************************************************************************/</span>
00017 
00018 <span class="preprocessor">#ifndef DYNAMIC_ARRAY_H</span>
00019 <span class="preprocessor"></span><span class="preprocessor">#define DYNAMIC_ARRAY_H</span>
00020 <span class="preprocessor"></span>
00021 <span class="preprocessor">#include "assert.h"</span>
00022 <span class="preprocessor">#include "PVRTGlobal.h"</span>
00023 
00024 <span class="comment">/*!****************************************************************************</span>
00025 <span class="comment">Class</span>
00026 <span class="comment">******************************************************************************/</span>
00027 
00028 <span class="comment">/*!***************************************************************************</span>
00029 <span class="comment">* @Class dynamicArray</span>
00030 <span class="comment">* @Brief Expanding array template class.</span>
00031 <span class="comment">* @Description Expanding array template class.</span>
00032 <span class="comment">*****************************************************************************/</span>
00033 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
00034 <span class="keyword">class </span><a class="code" href="classdynamicArray.html">dynamicArray</a>
00035 {
00036 <span class="keyword">public</span>:
00037     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="classdynamicArray.html#s0">c_i32DefaultSize</a> = 8;
00038     <span class="comment">/*!***************************************************************************</span>
<a name="l00039"></a><a class="code" href="classdynamicArray.html">00039</a> <span class="comment">    @Function           dynamicArray</span>
00040 <span class="comment">    @Description        Blank constructor. Makes a default sized array.</span>
00041 <span class="comment">    *****************************************************************************/</span>
<a name="l00042"></a><a class="code" href="classdynamicArray.html#s0">00042</a>     <a class="code" href="classdynamicArray.html#a0">dynamicArray</a>():
00043     m_i32Size(0),
00044         m_i32Capacity(c_i32DefaultSize)
00045     {
00046         m_pArray = <span class="keyword">new</span> T[c_i32DefaultSize];
00047     }
<a name="l00048"></a><a class="code" href="classdynamicArray.html#a0">00048</a> 
00049     <span class="comment">/*!***************************************************************************</span>
00050 <span class="comment">    @Function           dynamicArray</span>
00051 <span class="comment">    @Input              i32Size intial size of array</span>
00052 <span class="comment">    @Description        Constructor taking initial size of array in elements.</span>
00053 <span class="comment">    *****************************************************************************/</span>
00054     <a class="code" href="classdynamicArray.html#a0">dynamicArray</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> i32Size):
00055     m_i32Size(0),
00056         m_i32Capacity(i32Size)
00057     {
00058         _ASSERT(i32Size!=0);
00059         m_pArray = <span class="keyword">new</span> T[i32Size];
00060     }
<a name="l00061"></a><a class="code" href="classdynamicArray.html#a1">00061</a> 
00062     <span class="comment">/*!***************************************************************************</span>
00063 <span class="comment">    @Function           dynamicArray</span>
00064 <span class="comment">    @Input              original    the other dynamic array</span>
00065 <span class="comment">    @Description        Copy constructor.</span>
00066 <span class="comment">    *****************************************************************************/</span>
00067     <a class="code" href="classdynamicArray.html#a0">dynamicArray</a>(<span class="keyword">const</span> <a class="code" href="classdynamicArray.html">dynamicArray</a>&amp; original):
00068     m_i32Size(original.m_i32Size),
00069         m_i32Capacity(original.m_i32Capacity)
00070     {
00071         m_pArray = <span class="keyword">new</span> T[m_i32Capacity];
00072         <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i&lt;m_i32Size;i++)
00073         {
00074             m_pArray[i]=original.<a class="code" href="classdynamicArray.html#p2">m_pArray</a>[i];
<a name="l00075"></a><a class="code" href="classdynamicArray.html#a2">00075</a>         }
00076     }
00077 
00078     <span class="comment">/*!***************************************************************************</span>
00079 <span class="comment">    @Function           dynamicArray</span>
00080 <span class="comment">    @Input              pArray  an ordinary array</span>
00081 <span class="comment">    @Input              i32Size     number of elements passed</span>
00082 <span class="comment">    @Description        constructor from ordinary array.</span>
00083 <span class="comment">    *****************************************************************************/</span>
00084     <a class="code" href="classdynamicArray.html#a0">dynamicArray</a>(<span class="keyword">const</span> T* <span class="keyword">const</span> pArray, <span class="keyword">const</span> <span class="keywordtype">int</span> i32Size):
00085     <a class="code" href="classdynamicArray.html#p0">m_i32Size</a>(i32Size),
00086         <a class="code" href="classdynamicArray.html#p1">m_i32Capacity</a>(i32Size)
00087     {
00088         <a class="code" href="classdynamicArray.html#p2">m_pArray</a> = <span class="keyword">new</span> T[i32Size];
00089         <span class="comment">// copy old values to new array</span>
00090         <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i&lt;<a class="code" href="classdynamicArray.html#p0">m_i32Size</a>;i++)
00091         {
00092             <a class="code" href="classdynamicArray.html#p2">m_pArray</a>[i]=pArray[i];
<a name="l00093"></a><a class="code" href="classdynamicArray.html#a3">00093</a>         }
00094     }
00095 
00096     <span class="comment">/*!***************************************************************************</span>
00097 <span class="comment">    @Function           ~dynamicArray</span>
00098 <span class="comment">    @Description        Destructor.</span>
00099 <span class="comment">    *****************************************************************************/</span>
00100     <span class="keyword">virtual</span> <a class="code" href="classdynamicArray.html#a4">~dynamicArray</a>()
00101     {
00102         <span class="keywordflow">if</span>(<a class="code" href="classdynamicArray.html#p2">m_pArray</a>)
00103             <span class="keyword">delete</span>[](<a class="code" href="classdynamicArray.html#p2">m_pArray</a>);
00104     }
00105 
00106 
00107     <span class="comment">/*!***************************************************************************</span>
00108 <span class="comment">    @Function           append</span>
00109 <span class="comment">    @Input              addT    The element to append</span>
<a name="l00110"></a><a class="code" href="classdynamicArray.html#a4">00110</a> <span class="comment">    @Description        appends an element to the end of the array, expanding it</span>
00111 <span class="comment">    if necessary.</span>
00112 <span class="comment">    *****************************************************************************/</span>
00113     <span class="keywordtype">void</span> <a class="code" href="classdynamicArray.html#a5">append</a>(T addT)
00114     {
00115         <span class="keywordflow">if</span>(m_i32Size==m_i32Capacity)        <span class="comment">// should never be &gt;</span>
00116         {   <span class="comment">// expand array: expensive</span>
00117 
00118             m_i32Capacity*=2;   <span class="comment">// array doubles in size for each expansion</span>
00119             T *pDeadArray,*pNewArray = <span class="keyword">new</span> T[m_i32Capacity]; <span class="comment">// make new array</span>
00120 
00121             <span class="comment">// copy old values to new array</span>
00122             <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i&lt;m_i32Size;i++)
00123             {
<a name="l00124"></a><a class="code" href="classdynamicArray.html#a5">00124</a>                 pNewArray[i]=m_pArray[i];
00125             }
00126 
00127 
00128             pDeadArray = m_pArray;
00129             m_pArray = pNewArray;
00130             <span class="keyword">delete</span>[](pDeadArray);
00131         }
00132         <span class="comment">// add new element to end of array</span>
00133 
00134         <a class="code" href="classdynamicArray.html#p2">m_pArray</a>[<a class="code" href="classdynamicArray.html#p0">m_i32Size</a>] = addT;
00135         <a class="code" href="classdynamicArray.html#p0">m_i32Size</a>++;
00136     }
00137 
00138     <span class="comment">/*!***************************************************************************</span>
00139 <span class="comment">    @Function           prepend</span>
00140 <span class="comment">    @Input              addT    The element to prepend</span>
00141 <span class="comment">    @Description        prepend an element to the beginning of the array, expanding</span>
00142 <span class="comment">    it if necessary.</span>
00143 <span class="comment">    *****************************************************************************/</span>
00144     <span class="keywordtype">void</span> <a class="code" href="classdynamicArray.html#a6">prepend</a>(T addT)
00145     {
00146         <span class="keywordflow">if</span>(<a class="code" href="classdynamicArray.html#p0">m_i32Size</a>==<a class="code" href="classdynamicArray.html#p1">m_i32Capacity</a>)
00147         {   <span class="comment">// expand array</span>
00148 
00149             <a class="code" href="classdynamicArray.html#p1">m_i32Capacity</a>*=2;   <span class="comment">// array doubles in size for each expansion</span>
00150             T *pDeadArray,*pNewArray = <span class="keyword">new</span> T[<a class="code" href="classdynamicArray.html#p1">m_i32Capacity</a>]; <span class="comment">// make new array</span>
00151 
00152             <span class="comment">// copy all leaving a space at the start</span>
00153             <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i&lt;<a class="code" href="classdynamicArray.html#p0">m_i32Size</a>;i++)
00154             {
00155                 pNewArray[i+1]=<a class="code" href="classdynamicArray.html#p2">m_pArray</a>[i];
<a name="l00156"></a><a class="code" href="classdynamicArray.html#a6">00156</a>             }
00157 
00158             pDeadArray = m_pArray;
00159             m_pArray = pNewArray;
00160             <span class="keyword">delete</span>[](pDeadArray);
00161         }
00162         <span class="keywordflow">else</span>
00163         {
00164             <span class="comment">// copy all leaving a space at the start</span>
00165             <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i&lt;<a class="code" href="classdynamicArray.html#p0">m_i32Size</a>;i++)
00166             {
00167                 <a class="code" href="classdynamicArray.html#p2">m_pArray</a>[i+1]=<a class="code" href="classdynamicArray.html#p2">m_pArray</a>[i];
00168             }
00169         }
00170         <span class="comment">// add new element to end of array</span>
00171         <a class="code" href="classdynamicArray.html#p2">m_pArray</a>[0] = addT;
00172         <a class="code" href="classdynamicArray.html#p0">m_i32Size</a>++;
00173     }
00174 
00175     <span class="comment">/*!***************************************************************************</span>
00176 <span class="comment">    @Function           =</span>
00177 <span class="comment">    @Input              other   The dynamic array needing copied</span>
00178 <span class="comment">    @Description        assignment operator.</span>
00179 <span class="comment">    *****************************************************************************/</span>
00180     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T2&gt;
00181         <a class="code" href="classdynamicArray.html">dynamicArray</a>&amp; <a class="code" href="classdynamicArray.html#a7">operator=</a>(<span class="keyword">const</span> <a class="code" href="classdynamicArray.html">dynamicArray&lt;T2&gt;</a>&amp; other)
00182     {
00183         <span class="keywordflow">if</span>(<a class="code" href="classdynamicArray.html#p2">m_pArray</a>)
00184             <span class="keyword">delete</span>[](<a class="code" href="classdynamicArray.html#p2">m_pArray</a>);
00185 
00186         <a class="code" href="classdynamicArray.html#p2">m_pArray</a> = <span class="keyword">new</span> T2[other.<a class="code" href="classdynamicArray.html#p1">m_i32Capacity</a>];
00187         <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i&lt;other.<a class="code" href="classdynamicArray.html#p0">m_i32Size</a>;i++)
00188         {
00189             <a class="code" href="classdynamicArray.html#p2">m_pArray</a>[i]=other.<a class="code" href="classdynamicArray.html#p2">m_pArray</a>[i];
00190         }
00191         <a class="code" href="classdynamicArray.html#p1">m_i32Capacity</a> = other.<a class="code" href="classdynamicArray.html#p1">m_i32Capacity</a>;
00192         <a class="code" href="classdynamicArray.html#p0">m_i32Size</a> = other.<a class="code" href="classdynamicArray.html#p0">m_i32Size</a>;
00193         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00194"></a><a class="code" href="classdynamicArray.html#a7">00194</a>     }
00195 
00196     <span class="comment">/*!***************************************************************************</span>
00197 <span class="comment">    @Function           []</span>
00198 <span class="comment">    @Input              i32Index    index of element in array</span>
00199 <span class="comment">    @Return             the element indexed</span>
00200 <span class="comment">    @Description        indexed access into array. Note that this has no error</span>
00201 <span class="comment">    checking whatsoever</span>
00202 <span class="comment">    *****************************************************************************/</span>
00203     T&amp; <a class="code" href="classdynamicArray.html#a8">operator[]</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> i32Index)
00204     {
00205         _ASSERT(i32Index&lt;m_i32Capacity);
00206         <span class="keywordflow">return</span> m_pArray[i32Index];
00207     }
00208 
00209     <span class="comment">/*!***************************************************************************</span>
00210 <span class="comment">    @Function           []</span>
00211 <span class="comment">    @Input              i32Index    index of element in array</span>
00212 <span class="comment">    @Return         the element indexed</span>
00213 <span class="comment">    @Description        indexed access into array. Note that this has no error</span>
00214 <span class="comment">    checking whatsoever</span>
00215 <span class="comment">    *****************************************************************************/</span>
00216     <span class="keyword">const</span> T&amp; <a class="code" href="classdynamicArray.html#a8">operator[]</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> i32Index)<span class="keyword"> const</span>
<a name="l00217"></a><a class="code" href="classdynamicArray.html#a8">00217</a> <span class="keyword">    </span>{
00218         _ASSERT(i32Index&lt;m_i32Capacity);
00219         <span class="keywordflow">return</span> m_pArray[i32Index];
00220     }
00221 
00222     <span class="comment">/*!***************************************************************************</span>
00223 <span class="comment">    @Function           getSize</span>
00224 <span class="comment">    @Return         size of array</span>
00225 <span class="comment">    @Description        gives current size of array/number of elements</span>
00226 <span class="comment">    *****************************************************************************/</span>
00227     <span class="keywordtype">int</span> <a class="code" href="classdynamicArray.html#a10">getSize</a>()<span class="keyword"> const</span>
00228 <span class="keyword">    </span>{
00229         <span class="keywordflow">return</span> m_i32Size;
00230     }
<a name="l00231"></a><a class="code" href="classdynamicArray.html#a9">00231</a> 
00232     <span class="comment">/*!***************************************************************************</span>
00233 <span class="comment">    @Function           getCapacity</span>
00234 <span class="comment">    @Return         capacity of array</span>
00235 <span class="comment">    @Description        gives current allocated size of array/number of elements</span>
00236 <span class="comment">    *****************************************************************************/</span>
00237     <span class="keywordtype">int</span> <a class="code" href="classdynamicArray.html#a11">getCapacity</a>()<span class="keyword"> const</span>
00238 <span class="keyword">    </span>{
00239         <span class="keywordflow">return</span> m_i32Capacity;
00240     }
00241 
00242     <span class="comment">/*!***************************************************************************</span>
<a name="l00243"></a><a class="code" href="classdynamicArray.html#a10">00243</a> <span class="comment">    @Function           expandToSize</span>
00244 <span class="comment">    @Input              i32Size new capacity of array</span>
00245 <span class="comment">    @Description        expands array to new capacity</span>
00246 <span class="comment">    *****************************************************************************/</span>
00247     <span class="keywordtype">void</span> <a class="code" href="classdynamicArray.html#a12">expandToSize</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> i32Size)
00248     {
00249         <span class="keywordflow">if</span>(i32Size&lt;=m_i32Capacity)
00250             <span class="keywordflow">return</span>; <span class="comment">// nothing to be done</span>
00251 
00252         T *pDeadArray,*pNewArray = <span class="keyword">new</span> T[i32Size]; <span class="comment">// make new array</span>
00253 
<a name="l00254"></a><a class="code" href="classdynamicArray.html#a11">00254</a>         <span class="comment">// copy old values to new array</span>
00255         <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i&lt;m_i32Size;i++)
00256         {
00257             pNewArray[i]=m_pArray[i];
00258         }
00259 
00260         m_i32Capacity=i32Size;
00261         pDeadArray = m_pArray;
00262         m_pArray = pNewArray;
00263         <span class="keyword">delete</span>[](pDeadArray);
00264     }
<a name="l00265"></a><a class="code" href="classdynamicArray.html#a12">00265</a> 
00266     <span class="comment">/*!***************************************************************************</span>
00267 <span class="comment">    @Function           bubbleSort</span>
00268 <span class="comment">    @Description        very basic sorting function for array. Requires &gt; operator</span>
00269 <span class="comment">                        to be defined.</span>
00270 <span class="comment">                        TODO: implement a better sorting algorithm</span>
00271 <span class="comment">    *****************************************************************************/</span>
00272     <span class="keywordtype">void</span> <a class="code" href="classdynamicArray.html#a13">bubbleSort</a>()
00273     {
00274         <span class="keywordtype">bool</span> bSwap;
00275         <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i&lt;m_i32Size;++i)
00276         {
00277             bSwap=<span class="keyword">false</span>;
00278             <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=0;j&lt;m_i32Size-1;++j)
00279             {
00280                 <span class="keywordflow">if</span>(m_pArray[j]&gt;m_pArray[j+1])
00281                 {
00282                     PVRTswap(m_pArray[j],m_pArray[j+1]);
00283                     bSwap = <span class="keyword">true</span>;
00284                 }
00285             }
00286             <span class="keywordflow">if</span>(!bSwap)
00287                 <span class="keywordflow">return</span>;
00288         }
00289     }
00290 
<a name="l00291"></a><a class="code" href="classdynamicArray.html#a13">00291</a>     <span class="comment">/*!***************************************************************************</span>
00292 <span class="comment">    @Function           bubbleSort</span>
00293 <span class="comment">    @Description        very basic sorting function for array. Requires &gt; operator</span>
00294 <span class="comment">    to be defined.</span>
00295 <span class="comment">    use when T is a pointer so that the &gt; operator is called</span>
00296 <span class="comment">    on the actual type otherwise gets sorted by the pointer</span>
00297 <span class="comment">    addresses - not so useful requires &gt; operator to be defined</span>
00298 <span class="comment">    TODO: implement a better sorting algorithm</span>
00299 <span class="comment">    *****************************************************************************/</span>
00300     <span class="keywordtype">void</span> <a class="code" href="classdynamicArray.html#a14">bubbleSortPointers</a>()
00301     {
00302         <span class="keywordtype">bool</span> bSwap;
00303         <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i&lt;m_i32Size;++i)
00304         {
00305             bSwap=<span class="keyword">false</span>;
00306             <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=0;j&lt;m_i32Size-1;++j)
00307             {
00308                 <span class="keywordflow">if</span>((*m_pArray[j])&gt;(*m_pArray[j+1]))
00309                 {
00310                     PVRTswap(m_pArray[j],m_pArray[j+1]);
00311                     bSwap = <span class="keyword">true</span>;
00312                 }
00313             }
00314             <span class="keywordflow">if</span>(!bSwap)
00315                 <span class="keywordflow">return</span>;
00316         }
00317     }
00318 
00319 <span class="keyword">protected</span>:
<a name="l00320"></a><a class="code" href="classdynamicArray.html#a14">00320</a>     <span class="keywordtype">int</span>     m_i32Size;              
00321     <span class="keywordtype">int</span>     m_i32Capacity;          
00322     T       *m_pArray;              
00323 };
00324 
00325 <span class="comment">// note "this" is required for ISO standard C++ and gcc complains otherwise</span>
00326 <span class="comment">// http://lists.apple.com/archives/Xcode-users//2005/Dec/msg00644.html</span>
00327 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
00328 <span class="keyword">class </span><a class="code" href="classdynamicPointerArray.html">dynamicPointerArray</a> : <span class="keyword">public</span> <a class="code" href="classdynamicArray.html">dynamicArray</a>&lt;T*&gt;
00329 {
00330 <span class="keyword">public</span>:
00331     <span class="keyword">virtual</span> <a class="code" href="classdynamicPointerArray.html#a0">~dynamicPointerArray</a>()
00332     {
00333         <span class="keywordflow">if</span>(this-&gt;m_pArray)
00334         {
00335             <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i&lt;this-&gt;m_i32Size;i++)
00336             {
00337                 <span class="keyword">delete</span>(this-&gt;m_pArray[i]);
00338             }
00339         }
<a name="l00340"></a><a class="code" href="classdynamicArray.html#p0">00340</a>     }
<a name="l00341"></a><a class="code" href="classdynamicArray.html#p1">00341</a> };
<a name="l00342"></a><a class="code" href="classdynamicArray.html#p2">00342</a> 
00343 
00344 
00345 
00346 <span class="preprocessor">#endif // DYNAMIC_ARRAY_H</span>
00347 <span class="preprocessor"></span>
<a name="l00348"></a><a class="code" href="classdynamicPointerArray.html">00348</a> <span class="comment">/*****************************************************************************</span>
00349 <span class="comment">End of file (dynamicArray.h)</span>
00350 <span class="comment">*****************************************************************************/</span>
<a name="l00351"></a><a class="code" href="classdynamicPointerArray.html#a0">00351</a> 
</pre></div><br>
<br>
<P align=left><FONT size=2><STRONG><A 
   href="http://www.imgtec.com/powervr/insider/legal/index.asp">Copyright</A> � 
   1999-2008, Imagination Technologies Ltd.</STRONG></FONT></P>
<hr>
<address style="align: left;"><small><FONT color=f0f>
Generated by <a href="http://www.doxygen.org/index.html">DOXYGEN</a> 1.3.6</small></address>
</body>
</html>
